package com.zpark.merchant.api.service;

import com.zpark.jushanpay.common.domain.BusinessException;
import com.zpark.jushanpay.common.domain.PageVO;
import com.zpark.merchant.api.dto.MerchantDTO;
import com.zpark.merchant.api.dto.StaffDTO;
import com.zpark.merchant.api.dto.StoreDTO;

import java.util.List;

/**
 * 商户业务层接口
 */
public interface IMerchantService {

    /**
     * 根据商户ID查询数据
     * @param id 商户的id
     * @return 商户对象
     */
    MerchantDTO findById(Long id);

    /**
     * 注册商户服务接口，接收账号、密码、手机号，
     * 为了可扩展性使用merchantDto接收数据
     * @param dto 商户注册对象
     * @return
     */
    MerchantDTO createMerchant(MerchantDTO dto);

    /**
     * 商户资质申请业务层接口
     * @param merchantId 商户id
     * @param dto 商户资质申请对象
     * @throws BusinessException
     */
    void applyMerchant(Long merchantId, MerchantDTO dto) throws BusinessException;

    /**
     * 商户创建门店
     * @param dto 门店对象
     * @return
     * @throws BusinessException
     */
    StoreDTO createStore(StoreDTO dto) throws BusinessException;

    /**
     * 商户添加员工
     * @param dto 员工对象
     * @return
     * @throws BusinessException
     */
    StaffDTO createStaff(StaffDTO dto) throws BusinessException;

    /**
     * 商户设置管理员
     * @param storeId 门店id
     * @param staffId 员工id（管理员id）
     * @throws BusinessException
     */
    void bindStoreAndStaff(Long storeId, Long staffId) throws BusinessException;

    /**
     * 根据商户的id查询门店的分页信息
     * @param storeDTO 门店信息
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageVO<StoreDTO> queryStoreByMerchantId(StoreDTO storeDTO, Integer pageNo, Integer pageSize);

    /**
     * 根据门店id和商户id查询门店是否存在
     * @param storeId 门店id
     * @param merchantId 商户ID
     * @return
     */
    Boolean queryStoreIdInMerchantId(Long storeId, Long merchantId);
}
